﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Aurora.AI.Domain.Domain.ChatChannel.Aggregates;
using Aurora.AI.Gateway.Services.ChatChannel;
using Aurora.TaskScheduler.Abstractions;
using Aurora.TaskScheduler.Abstractions.Attributes;
using Aurora.TaskScheduler.Abstractions.BaseModel;
using Aurora.TaskScheduler.Abstractions.SchedulerAttributes;
using Quartz;

namespace Gateway.UI.Api.TaskJobs;

/// <summary>
/// ai 渠道 监控的定时任务  暂时弃用
/// </summary>
[DisallowConcurrentExecution]
// [Cron("0 */10 * * * ?", "每10分钟执行一次", description: "ai 渠道 监控的定时任务")]
[TaskJobLock]
public class AIChannelTestJob : ITaskJob<string>
{
    private readonly ChatChannelService _chatChannelService;
    private readonly ILogger<AIChannelTestJob> _logger;
    private readonly ChannelTestService _channelTestService;
    /// <summary>
    /// 
    /// </summary>
    /// <param name="chatChannelService"></param>
    /// <param name="logger"></param>
    /// <param name="channelTestService"></param>
    public AIChannelTestJob(ChatChannelService chatChannelService, ILogger<AIChannelTestJob> logger,
        ChannelTestService channelTestService)
    {
        _chatChannelService = chatChannelService;
        _logger = logger;
        _channelTestService = channelTestService;
    }

    /// <summary>
    /// 执行任务
    /// </summary>
    /// <param name="parameter"></param>
    /// <returns></returns>
    /// <exception cref="NotImplementedException"></exception>
    public async Task<JobResult> ExecuteAsync(string parameter)
    {
        // 开始扫描
        var listWithControlAutomatically = await _chatChannelService.GetListWithControlAutomatically();
        if (listWithControlAutomatically.Count <= 0)
        {
            _logger.LogWarning("当前未检测到自动监控的渠道");
            return new JobResult()
            {
                Success = true,
                Message = "当前未检测到自动监控的渠道"
            };
        }

        // 开始进行检测
        foreach (ChatChannel chatChannel in listWithControlAutomatically)
        {
            await _channelTestService.Test(chatChannel.Id);
        }

        return new JobResult()
        {
            Success = true,
            Message = "执行成功"
        };
    }
}